// 【关键修复】显式捕获 dotenv 加载错误
const dotenv = require('dotenv');
const dotenvResult = dotenv.config(); // 单独执行加载

// 调试：打印 .env 加载结果
if (dotenvResult.error) {
    console.error('🚨 .env 文件加载失败！错误详情：', dotenvResult.error);
    console.error('💡 检查：.env 文件是否存在？路径是否正确？是否有权限读取？');
} else {
    console.log('✅ .env 文件加载成功！已解析的环境变量：', dotenvResult.parsed);
}

// 调试：启动时打印最终的 API_KEY（确认是否正确加载）
console.log('🔑 实际生效的 API_KEY：', process.env.API_KEY);

const express = require('express');
const db = require('./db.js');
const eventsRouter = require('./database/routes/events.js');

// 【新增】引入CORS包
const cors = require('cors');

// 【新增】引入限流包
const rateLimit = require('express-rate-limit'); 

const app = express();
const PORT = process.env.PORT || 3000;

// 【新增】配置CORS中间件
app.use(cors()); // 允许所有跨域请求

// 解析 JSON 请求体
app.use(express.json());

// 【新增】配置并应用限流中间件
const limiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 时间窗口（毫秒）：15分钟
    max: 100, // 每个IP的最大请求数
    message: '请求过于频繁，请稍后再试', // 可选：超过限制时返回的提示
});
app.use(limiter); // 对所有请求生效

// 【API 密钥验证中间件】
app.use((req, res, next) => {
    const clientApiKey = req.headers['x-api-key'];
    const serverApiKey = process.env.API_KEY;

    // 调试：完整打印客户端与服务端密钥
    console.log('🔍 客户端传递的 API Key：', clientApiKey);
    console.log('🔍 服务端期望的 API Key：', serverApiKey);

    // 严格校验：密钥必须存在且完全匹配
    if (clientApiKey !== serverApiKey) {
        return res.status(401).json({ 
            error: 'Unauthorized: Invalid API key',
            // 调试：暴露服务端实际期望的密钥（生产环境需删除）
            expectedKey: serverApiKey 
        });
    }
    next();
});

// 【全局响应头中间件】
app.use((req, res, next) => {
    res.setHeader('Content-Type', 'application/json; charset=utf-8');
    next();
});

// 挂载路由
app.use('/api/events', eventsRouter);

// 【数据库测试路由】
app.get('/test-db', async (req, res) => {
    try {
        const rows = await db.query('SELECT * FROM users'); 
        res.json(rows);
    } catch (err) {
        console.error('❌ 数据库查询错误:', err);
        res.status(500).json({ error: 'Database error' });
    }
});

// 根路径路由
app.get('/', (req, res) => {
    res.send('根路径已配置');
});

// 启动服务器
app.listen(PORT, () => {
    console.log(`🚀 服务器已启动：http://localhost:${PORT}`);
    console.log('📋 完整环境变量列表：', process.env);
});